package hit.edu.zjc.UserInterface;

import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class UDStringType extends UserDef {

	public static final int MostFrequent=101;
	public static final int LeastFrequent=102;
	
	public String User_regex;//用户输入的正则表达式。
	public String User_correct_data;
	
	
	//EasyFill
	public UDStringType(boolean ischeck,boolean in, String regex, String ucd) {
		super(StringType, ischeck,in,true);//允许简单填充。
		User_regex=regex;
		User_correct_data=ucd;
	}
	//EasyFill 不一致修复
	public UDStringType(boolean ischeck,boolean in, String regex, String ucd,int ft) {
		super(StringType, ischeck,in,true);//允许简单填充。
		User_regex=regex;
		User_correct_data=ucd;
		FillType=ft;
	}
	
	//缺失值填充
	public UDStringType(String regex,int ft,int[] ColumID)
	{
		super(StringType, true, false,false);
		User_regex=regex;
		FillType=ft;
		RelevantColumID=new int[ColumID.length];
		for(int i=0;i<ColumID.length;i++)
		{
			RelevantColumID[i]=ColumID[i];
		}
	}
	//不填充，不检查的构造方式
	public UDStringType()
	{
		super(StringType,false,false,true);
	}
	@Override
	public boolean checkdata(String ob) {
		String data=ob;
		if(data==null||data.trim().equals("")||data.trim().toLowerCase().equals("null"))
		{
			if(isNull)
				return true;
			else
				return false;
		}
		try
		{
			if(User_regex!=null&&User_regex.trim().equals("*"))
				User_regex=".*";
			Pattern pattern=Pattern.compile(User_regex);
			Matcher matcher=pattern.matcher(data);
			return matcher.matches();
		}
		catch(Exception e)
		{
			return false;
		}
	}

	@Override
	public String correctdata() {
		if(isEasyFill)
		{
			return User_correct_data;
		}
		else
			return null;
	}
	
	@Override
	public String complexFill(String[] data_array)
	{
		if(FillType==EASYFILL)
			return User_correct_data;
		if(data_array.length==0)
			return null;
		ArrayList<String> strlist=new ArrayList<String>();
		int[] num_array=new int[data_array.length];//存储字符串出现的次数
		
		for(int i=0;i<data_array.length;i++)
		{
			String str=data_array[i];
			if(str==null||str.trim().equals(""))
				continue;
			int k=0;
			for(;k<strlist.size();k++)
			{
				if(strlist.get(k).equals(str))
				{
					num_array[k]++;
					break;
				}
			}
			if(k==strlist.size())
			{
				int size=strlist.size();
				strlist.add(size,str);//在最后新加一个
				num_array[size]=1;
			}
		}
		
		if(FillType==MostFrequent)
		{
			int maxindex=0;
			for(int i=1;i<strlist.size();i++)
			{
				if(num_array[i]>num_array[maxindex])
					maxindex=i;
			}
			return strlist.get(maxindex);
		}
		else if(FillType==LeastFrequent)
		{
			int minindex=0;
			for(int i=1;i<strlist.size();i++)
			{
				if(num_array[i]<num_array[minindex])
					minindex=i;
			}
			return strlist.get(minindex);
		}
		else
			return null;
	}
	

}
